package com.itheima.d3_static.demo02;

//目标：了解静态方法的注意事项
public class Demo02 {
    public static void main(String[] args) {
        /**
         * 注意事项：
         * 静态方法只能直接访问静态成员（成员变量、成员方法）
         * 实例方法既可以直接访问静态成员，也可以访问非静态成员
         *
         * 需求：分别访问本类的静态和非静态属性及方法，验证静态方法的访问特点
         */

        //1.main方法就是静态方法，在main方法中分别直接访问本类的各个成员
        //System.out.println(noStaticField);
        System.out.println(staticFiled);
        //结论：静态方法只能访问静态变量

        //noStaticMethod();
        staticMethod();
        //结论：静态方法之恩呢访问静态方法

        //限制原因：静态成员在类加载的时候加载，而实例成员是对象出现之后才出现！
        //静态方法中访问实例成员，有可能对象还未出现！就不能访问实例成员！
    }

    //2.定义一个实例方法，分别访问本类的各个成员
    public void method() {
        System.out.println(noStaticField);
        System.out.println(staticFiled);
        noStaticMethod();
        staticMethod();
        //结论：实例方法既可以访问实例成员，也可以访问静态成员！

        //原因：实例方法一定得被对象调用，对象都出现了，类早就加载了！静态的东西和实例的东西都有了，当然可以访问！
    }

    String noStaticField = "实例变量";

    static String staticFiled = "类变量";

    public void noStaticMethod() {
        System.out.println("实例成员方法");
    }

    public static void staticMethod() {
        System.out.println("类方法");
    }
}
